﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Tipler.DataSetler;
using Tipler.Enumlar;
using Tipler.Siniflar;
using IKYSWeb.Siniflar;
using Tipler.OzellikTipleri;
using System.Data;
using IsKurallari.Yetki;

namespace IKYSWeb.Yetki
{
    [YetkiAttribute(EnumSayfaYetkileri.Menu)]
    public partial class Yetki_Menu : BasePage
    {

        #region Session Özellikleri

        private MenuDataSet MenuListesi
        {
            get { return (MenuDataSet)Session["LISTE"]; }
            set { Session["LISTE"] = value; }
        }

        private int SecilenMenuID
        {
            get
            {
                if (Session["SONKAYITID"] == null)
                    return -1;
                else
                    return (int)Session["SONKAYITID"];
            }
            set { Session["SONKAYITID"] = value; }
        }

        #endregion

        #region Sayfa Açılış

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                txtMenuAdi.MaxLength = (new MenuDataSet.MenuDataTable()).MenuAdiColumn.MaxLength;
                txtUzanti.MaxLength = (new MenuDataSet.MenuDataTable()).UzantiColumn.MaxLength;

                MenuListesi = null;
                SecilenMenuID = -1;

                mv.SetActiveView(vListe);
            }
        }

        #endregion

        #region Butonlar

        protected void btnKaydet_Click(object sender, EventArgs e)
        {
            if (!YetkiAraci.YetkiliMi(EnumYetkiler.MenüKaydet, Response)) return;

            MenuDataSet.MenuRow drMenu;

            if (MenuListesi == null) MenuListesi = new MenuDataSet();
            if (SecilenMenuID == -1)
            {
                drMenu = MenuListesi.Menu.NewMenuRow();
                drMenu.MenuID = YeniIDGetir(MenuListesi.Menu.TableName);
                drMenu.Silindi = false;

                drMenu.KisayolResim = "";
            }
            else
            {
                drMenu = MenuListesi.Menu.FindByMenuID(SecilenMenuID);
            }

            drMenu.MenuAdi = txtMenuAdi.Text.Trim();
            drMenu.Uzanti = txtUzanti.Text.Trim();
            drMenu.Sira = txtSira.Sayi;
            if (txtUstMenu.Deger == "")
                drMenu.SetParentIDNull();
            else
                drMenu.ParentID = Convert.ToInt32(txtUstMenu.Deger);

            if (SecilenMenuID == -1)
            {
                MenuListesi.Menu.AddMenuRow(drMenu);
            }

            if (MenuListesi.HasChanges())
            {
                YetkiIsKurali oYetki = new YetkiIsKurali();
                FonksiyonSonuc<Boolean> oSonuc = oYetki.MenuKaydet((MenuDataSet)MenuListesi.GetChanges());

                if (oSonuc.HataVarMi)
                {
                    MenuListesi.RejectChanges();
                    throw new Exception(oSonuc.Hata);
                }

                MenuListesi.AcceptChanges();

                grdListe.DataSource = MenuListesi;
                grdListe.DataBind();
            }
            FormTemizle();
            mv.SetActiveView(vListe);

            MesajGoster(Page, "Menu bilgisi başarı ile kaydedilmiştir.", MesajTipiEnum.Bilgi);
        }

        protected void btnYeniKayit_Click(object sender, EventArgs e)
        {
            if (!YetkiAraci.YetkiliMi(EnumYetkiler.MenüYeniKayit, Response)) return;

            FormTemizle();
            mv.SetActiveView(vKayit);
        }

        protected void btnGeri_Click(object sender, EventArgs e)
        {
            mv.SetActiveView(vListe);
        }

        protected void btnListele_Click(object sender, EventArgs e)
        {
            YetkiIsKurali oYetki = new YetkiIsKurali();
            FonksiyonSonuc<MenuDataSet> fsMenu = oYetki.MenuGetirKriterli(txtMenuAdiAra.Text);
            if (fsMenu.HataVarMi)
                throw new Exception(fsMenu.Hata);

            MenuListesi = fsMenu.Sonuc;
            grdListe.DataSource = MenuListesi;
            grdListe.DataBind();
        }

        #endregion

        #region Event ve Fonksiyonlar

        protected void grdListe_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            grdListe.DataSource = MenuListesi;
            grdListe.PageIndex = e.NewPageIndex;
            grdListe.DataBind();
        }

        protected void grdListe_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
            {
                MenuDataSet.MenuRow drMenu = (MenuDataSet.MenuRow)((DataRowView)e.Row.DataItem).Row;

                e.Row.Cells[3].Text = ((EnumEvetHayir)drMenu.Silindi.GetHashCode()).ToString();
            }
        }

        protected void grdListe_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName != "Page")
            {
                int rowIndex = Convert.ToInt32(e.CommandArgument);
                int MenuID = Convert.ToInt32(grdListe.DataKeys[rowIndex].Value.ToString());

                if (e.CommandName == "Guncelle")
                {
                    if (!YetkiAraci.YetkiliMi(EnumYetkiler.MenüGüncelle, Response)) return;

                    FormHazirla(MenuID);
                    mv.SetActiveView(vKayit);
                }
                else if (e.CommandName == "Sil")
                {
                    if (!YetkiAraci.YetkiliMi(EnumYetkiler.MenüSil, Response)) return;

                    MenuDataSet.MenuRow drMenu = MenuListesi.Menu.FindByMenuID(MenuID);
                    drMenu.Silindi = true;

                    YetkiIsKurali oYetki = new YetkiIsKurali();
                    FonksiyonSonuc<Boolean> oSonuc = oYetki.MenuKaydet((MenuDataSet)MenuListesi.GetChanges());

                    if (oSonuc.HataVarMi)
                    {
                        MenuListesi.RejectChanges();
                        throw new Exception(oSonuc.Hata);
                    }

                    MenuListesi.AcceptChanges();

                    grdListe.DataSource = MenuListesi;
                    grdListe.DataBind();

                    MesajGoster(Page, "Menu bilgisi başarı ile silinmiştir.", MesajTipiEnum.Bilgi);

                }
            }
        }

        private void FormHazirla(int MenuID)
        {
            MenuDataSet.MenuRow drMenu = MenuListesi.Menu.FindByMenuID(MenuID);

            txtMenuAdi.Text = drMenu.MenuAdi;
            txtUzanti.Text = drMenu.Uzanti;
            txtSira.Sayi = drMenu.Sira;
            if (drMenu.IsParentIDNull())
                txtUstMenu.Clear();
            else
                txtUstMenu.Deger = drMenu.ParentID.ToString();
            SecilenMenuID = MenuID;
        }

        private void FormTemizle()
        {
            txtMenuAdi.Text = "";
            txtUzanti.Text = "";
            txtUstMenu.Clear();
            txtSira.Clear();
            SecilenMenuID = -1;
        }

        #endregion

        

    }
}